table of contents
CHOWN(2) | Руководство программиста Linux | CHOWN(2) |
ИМЯ¶
chown, fchown, lchown - изменить владельца файла
ОБЗОР¶
#include <sys/types.h>
#include <unistd.h>
int chown(const char *path, uid_t
owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t
group);
int lchown(const char *path, uid_t owner, gid_t
group);
ОПИСАНИЕ¶
Изменяет владельца для файла, задаваемого параметрами path или fd. Только суперпользователь может изменять владельца файла. Владелец файла может изменять группу файла на любую группу, к которой он принадлежит. Суперпользователь может произвольно изменять группу.
Если параметр owner или group заданы как -1, то соответствующий идентификатор не изменяется.
Когда владелец или группа исполняемого файла изменяются не-суперпользователем, то очищаются биты S_ISUID и S_ISGID. POSIX не требует, чтобы это происходило, когда суперпользователь выполняет chown; в этом случае поведение зависит от версии ядра Linux. Если в правах доступа к файлу не установлен бит исполнения группой (S_IXGRP), то бит S_ISGID означает принудительную блокировку на этом файле и не очищается функцией chown.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
В случае успеха возвращается ноль. При ошибке возвращается -1, а errno устанавливается должным образом.
ОШИБКИ¶
В зависимости от файловой системы могут также возвращаться другие ошибки. Общий набор ошибок chown перечислен ниже:
- EPERM
- Фактический UID не совпадает с владельцем файла и не равен нулю; параметры owner или group заданы неверно.
- EROFS
- Файл находится на файловой системе, смонтированной только для чтения.
- EFAULT
- path указывает за пределы доступного адресного пространства.
- ENAMETOOLONG
- path слишком длинно.
- ENOENT
- Файл не существует.
- ENOMEM
- Ядру не хватило памяти.
- ENOTDIR
- Компонент пути, использованный как каталог в path, в действительности таковым не является.
- EACCES
- Запрещен поиск в одном из каталогов, находящихся на пути к файлу.
- ELOOP
- При обработке path встречено слишком много символьных ссылок (возможно зацикливание по символьным ссылкам -- прим. пер.).
Общие ошибки fchown таковы:
ЗАМЕЧАНИЯ¶
В версиях Linux до 2.1.81 (кроме 2.1.46), chown не следовал по символьным ссылкам. Начиная с версии Linux 2.1.81 chown следует по символьным ссылкам, и существует новый системный вызов lchown, который не следует по символьным ссылкам. Начиная с Linux 2.1.86 этот новый вызов (имеющий ту же смысл, что и старый chown), имеет тот же самый номер системного вызова, а chown получил новый номер.
Прототип fchown доступен только если определен символ _BSD_SOURCE (или явно или неявно, но задан символ _POSIX_SOURCE или компиляция осуществляется с флагом -ansi).
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Системный вызов chown соответствует SVr4, SVID, POSIX, X/OPEN. В версии 4.4BSD его может использовать только суперпользователь (то есть обычные пользователи не могут отдавать файлы). SVr4 документирует EINVAL, EINTR, ENOLINK и EMULTIHOP, но не документирует ENOMEM. POSIX.1 не документирует ENOMEM и ELOOP.
Системный вызов fchown соответствует 4.4BSD и SVr4. SVr4 документирует дополнительные коды ошибки EINVAL, EIO, EINTR и ENOLINK.
ОГРАНИЧЕНИЯ¶
Логика работы chown специально нарушается на файловых системах NFS с разрешенным преобразованием UID. Вдобавок логика работы нарушается у всех системных вызовов, которые обращаются к содержимому файла, потому что chown может привести к немедленному запрету доступа к уже открытым файлам. Кэширование на клиенте может привести к задержке между сменой владельца и истинным моментом, когда этот пользователь сможет обратиться к файлу с других клиентов.
СМОТРИ ТАКЖЕ¶
ПЕРЕВОД¶
Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999-2000, Виктор Вислобоков <corochoone@perm.ru> 2003
1997-05-18 | Linux 2.1.81 |